<html>
	<head>
		<title>
			lines
		</title>
		<script src = "gamelogic.js"> </script>
		<script>
			var score = 0;
			var steps = 0;
			var canvas;
			var context;
			var a = []; a['marker'] = []; a['marker']['y'] = -1; a['marker']['x'] = -1; a['count']=0; a['add']=true;
			var w = [];	//-1 стена	0 старт 	-2 еще не были
			var z=30;
			
			function clearWave(){
				function makeWave(x,y,i){
					w[x][y]=i;
					
					if(w[x+1][y]==-2)
						makeWave(x+1,y,i+1);
					if(w[x-1][y]==-2)
						makeWave(x-1,y,i+1);
					if(w[x][y+1]==-2)
						makeWave(x,y+1,i+1);
					if(w[x][y-1]==-2)
						makeWave(x,y-1,i+1);
				}
				for(var x=0;x<10;x++) {
					for(var y=0;y<10;y++){
						if(a[x][y])
							w[x][y]=-1;
						else
							w[x][y]=-2;
					}
				}
				w[a.marker.x][a.marker.y]=0;
				makeWave(a.marker.x,a.marker.y,0);
			}
			
			
			
			function scanlines(x,y){
				var ln_h,ln_w,ln_d1,ln_d2;
				ln_h=ln_w=ln_d1=ln_d2=1;
				var tx,ty;
				//вправо
				tx=x+1; ty=y;
				while(a[x][y]==a[tx][ty]){
					ln_w++;
					tx++;
				}
				//влево
				tx=x-1; ty=y;
				while(a[x][y]==a[tx][ty]){
					ln_w++;
					tx--;
				}
				//вниз
				tx=x; ty=y+1;
				while(a[x][y]==a[tx][ty]){
					ln_h++;
					ty++;
				}
				//вверх
				tx=x; ty=y-1;
				while(a[x][y]==a[tx][ty]){
					ln_h++;
					ty--;
				}
				//вниз вправо
				tx=x+1; ty=y+1;
				while(a[x][y]==a[tx][ty]){
					ln_d1++;
					ty++;
					tx++;
				}
				//вверх влево
				tx=x-1; ty=y-1;
				while(a[x][y]==a[tx][ty]){
					ln_d1++;
					ty--;
					tx--;
				}
				//вверх вправо
				tx=x+1; ty=y-1;
				while(a[x][y]==a[tx][ty]){
					ln_d2++;
					ty--;
					tx++;
				}
				//вниз влево
				tx=x-1; ty=y+1;
				while(a[x][y]==a[tx][ty]){
					ln_d2++;
					ty++;
					tx--;
				}
				
				//ln_h,ln_w,ln_d1,ln_d2;
				//очистка
				
				//горизонталь w
				if(ln_w>4){
					score+=ln_w-1;
					tx=x+1; ty=y;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx++;
					}
					tx=x-1; ty=y;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx--;
					}
				}
				//вертикаль h
				if(ln_h>4){
					score+=ln_h-1;
					tx=x; ty=y+1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						ty++;
					}
					tx=x; ty=y-1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						ty--;
					}
				}
				//диагональ1
				if(ln_d1>4){
					score+=ln_d1-1;
					tx=x+1; ty=y+1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx++;
						ty++;
					}
					tx=x-1; ty=y-1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx--;
						ty--;
					}
				}
				//диагональ2
				if(ln_d2>4){
					score+=ln_d2-1;
					tx=x+1; ty=y-1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx++;
						ty--;
					}
					tx=x-1; ty=y+1;
					while(a[x][y]==a[tx][ty]){
						a[tx][ty]=0;
						a.count--;
						tx--;
						ty++;
					}
				}
				//дальше удаляем центр if надo
				if((ln_w>4)||(ln_h>4)||(ln_d1>4)||(ln_d2>4)){
					a[x][y]=0;
					a.count--;
					score++;
					a.add=false;
				}
			}

			function addball(){
				var x=0;
				var y=x;
				if(a.count<100){
					while(a[x][y]){
						x=Math.floor(Math.random()*10);
						y=Math.floor(Math.random()*10);
					}
					a[x][y]=Math.round((Math.floor(Math.random()*10)+1)/2);
					a.count++;
					scanlines(x,y);
				}
			}

			function moveball(x,y){
				if ((a.marker.x>-1) && (a.marker.y>-1)){
					clearWave();
					if (w[x][y]>0){
						steps++;
						a[x][y]=a[a.marker.x][a.marker.y];
						a[a.marker.x][a.marker.y]=0;
						a.marker.x=-1;
						a.marker.y=-1;
						a.add=true;
						scanlines(x,y);
						if(a.count==0){
							alert("Вы выиграли");
							a.count=0;
							initgame();
						}
						else if(a.add){
							addball();
							addball();
							addball();
						}
					}
				}
			}

			function updateMarker(x,y){
				if((a.marker.x!=x) || (a.marker.y!=y)){
					a.marker.x=x;
					a.marker.y=y;
				}
				else{
					a.marker.x=-1;
					a.marker.y=-1;
				}
			}

			function onClEvent(evt){
				mx=evt.clientX;
				my=evt.clientY;
				mx=Math.floor((mx-8)/z);
				my=Math.floor((my-8)/z);
				if(a[mx][my])
					updateMarker(mx,my);
				else
					moveball(mx,my);
				redraw(a);
				if (a.count==100){
					alert("Вы проиграли");
					a.count=0;
					initgame();
				}
			}

			function redraw(a){
				document.getElementById('score').innerHTML = "очки: " + score;
				document.getElementById('steps').innerHTML = "шаги: " + steps;
				context.strokeStyle="#222222";
				context.lineWidth=2;
				var x,y,rx,ry;

				for(x=0;x<10;x++)
					for(y=0;y<10;y++){
						rx=z*x;
						ry=z*y;
						context.fillStyle="#666666";
						if ( (a.marker.x==x) && (a.marker.y==y))
							context.fillStyle="#000000";
						context.fillRect(rx, ry, z, z);
						context.strokeRect(rx, ry, z, z);
						if(a[x][y]){
							if(a[x][y]==1)
								context.fillStyle="#ff0000";
							else if(a[x][y]==2)
								context.fillStyle="#ffff00";
							else if(a[x][y]==3)
								context.fillStyle="#ffbbff";
							else if(a[x][y]==4)
								context.fillStyle="#00ff00";
							else if(a[x][y]==5)
								context.fillStyle="#00ffff";
							rx+=(z/2);
							ry+=(z/2);
							context.beginPath();
							context.arc(rx,ry,z/3,0,Math.PI*2,true);
							context.closePath();
							context.fill();
						}
					}
			}

			function initgame(){
				score = 0;
				steps = 0;
				for(x=-1;x<11;x++){
					a[x]=[];
					for(y=-1;y<11;y++)
						a[x][y]=0;
				}
				for(x=-1;x<11;x++){
					w[x]=[];
					for(y=-1;y<11;y++)
						w[x][y]=-1;
				}
				addball();
				addball();
				addball();
				redraw(a);
			}

			function start(){
				canvas = document.getElementById("myCanvas");
				context = canvas.getContext("2d");
				initgame();
			}
		</script>

		<style>
			canvas{
				border:solid black 1px;
			}
			button{
				color:white;
				background-color:black;
			}
		</style>
		<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8"/>
	</head>
	
	<body onload="start()">
		<canvas id="myCanvas" width="300" height="300" onclick="onClEvent(event);">
		</canvas>
		<div id = "score">
			очки
		</div>
		<div id = "steps">
			шаги
		</div>
		<hr>
		<div id="about">
		<p>
			Разработал Шатов Дмитрий.<br/>
			<a href="http://schoolmit.ru">ШМИТ</a>. Январь, 2011.<br>
			<a href="http://www.progschool.ru/index.php/ШП/Portfolio/SchoolMIT2011#.D0.A8.D0.B0.D1.82.D0.BE.D0.B2_.D0.94.D0.BC.D0.B8.D1.82.D1.80.D0.B8.D0.B9_.D0.B8_.D0.B8.D0.B3.D1.80.D0.B0_Lines">Описание проекта</a> на сайте Школы программиста.
		</div>
	</body>

</html>
